package es.ull.etsii.aa.metodos;

import java.util.LinkedList;

import es.ull.etsii.aa.datos.Nodo;
import es.ull.etsii.aa.utiles.ParNodos;

public class PRDistancia {

	private LinkedList<ParNodos> enteros;
	private LinkedList<ParNodos> rotos;
	
	public PRDistancia(LinkedList<Nodo> tour, LinkedList<Nodo> tourPrima) {
		
		enteros = new LinkedList<ParNodos>();
		rotos = new LinkedList<ParNodos>();
		
		for (int i = 0; i < tour.size() - 1; i++) {
			int j = tourPrima.indexOf(tour.get(i));
			if (tour.get(i+1).equals(tourPrima.get(j+1)))
				enteros.add(new ParNodos(tour.get(i), tour.get(i+1)));
			else
				rotos.add(new ParNodos(tour.get(i), tour.get(i+1)));
		}
	}
	
	/**
	 * Getter
	 * @return enteros
	 */
	public LinkedList<ParNodos> getEnteros() {
		return enteros;
	}
	
	/**
	 * Getter
	 * @return rotos
	 */
	public LinkedList<ParNodos> getRotos() {
		return rotos;
	}
	
	/**
	 * Devuelve el primer nodo del par de enteros
	 * cuyo segundo nodo es nodo2. Si no existe 
	 * un par con nodo2 como segundo nodo devuelve
	 * null
	 * @param nodo2
	 * @return 
	 */
	public Nodo getNodo1Enteros(Nodo nodo2) {
		for (ParNodos par : enteros) {
			if (par.getNodo2().equals(nodo2))
				return par.getNodo1();
		}
		return null;
	}
	
	/**
	 * Devuelve el primer nodo del par de rotos
	 * cuyo segundo nodo es nodo2. Si no existe 
	 * un par con nodo2 como segundo nodo devuelve
	 * null
	 * @param nodo2
	 * @return 
	 */
	/*public Nodo getNodo1Rotos(Nodo nodo2) {
		for (ParNodos par : rotos) {
			if (par.getNodo2().equals(nodo2))
				return par.getNodo1();
		}
		return null;
	}*/
	
	/**
	 * Devuelva la distancia entre los dos tours 
	 * Calculada a partir del numero de pares rotos
	 * @return rotos.size()
	 */
	public int distancia() {
		return rotos.size();
	}
	
}
